#ifndef __HAL_USB_H__
#define __HAL_USB_H__

#include "gbl_types.h"
#include "os_api.h"
/*===========================================================================

                          Type definition.

===========================================================================*/

typedef enum /* The number of ports in the UART  */
{
    USB_PORT_1, // YUGA LTE USB Modem 4E3C
    USB_PORT_2, // YUGA HS-USB AT 4E3C
} USB_Port;

/*===========================================================================

                          INTERNAL FUNCTION DECLARATIONS

===========================================================================*/


/*****************************************************************
* Function: hal_UsbOpenCb
*
* Description:
* 	该函数用于打开 USB 设备，通过回调函数接收数据。
* 
* Parameters:
* 	portNumber 	[In] 	USB口选择。
* 	uart_cb  	[in] 	接收数据的回调函数。
* Return:
* 	None
*
*****************************************************************/
void hal_UsbOpenCb(USB_Port portNumber, void  (*usb_cb)(UINT8 *, UINT32));




/*****************************************************************
* Function: hal_UsbClose
*
* Description:
* 	该函数用于关闭 USB 设备。
* 
* Parameters:
* 	portNumber 	[In] 	USB口选择。
* Return:
* 	None
*
*****************************************************************/
void hal_UsbClose(USB_Port portNumber);


/*****************************************************************
* Function: hal_UartClose
*
* Description:
* 	该函数用于通过 UART 发送数据。
* 
* Parameters:
* 	portNumber 	[In] 	串口选择。
* 	bufPtr   	[In] 	发送数据内容。
* 	length   	[In] 	发送数据长度。
* Return:
* 	None
*
*****************************************************************/
void hal_UsbWrite(USB_Port portNumber, UINT8 *bufPtr, UINT32 length);


/*****************************************************************
* Function: hal_UsbRegisterVbusCb
*
* Description:
* 	该函数用于注册VBUS状态回调函数。
* 
* Parameters:
* 	usb_vbus_cb 	[In] 	vbus状态回调函数。
* 						    0: vbus断开
* 						    1: vbus连接
* Return:
* 	None
*
*****************************************************************/
void hal_UsbRegisterVbusCb(void  (*usb_vbus_cb)(UINT8));


/*****************************************************************
* Function: hal_UsbSetNetType
*
* Description:
* 	该函数用于注册VBUS状态回调函数。
* 
* Parameters:
* 	nettype 	[In] 	网卡类型。
* 						0: 禁用网卡
* 						1: rndis网卡
* 						2: ecm网卡
* Return:
* 	0       成功
* 	other   失败
*
*****************************************************************/
int hal_UsbSetNetType(UINT8 nettype);


/*****************************************************************
* Function: hal_UsbOnOff
*
* Description:
* 	该函数用于内部关闭和打开USB。
* 
* Parameters:
* 	onoff 	[In] 	关闭或者打开USB。
* 						0: 内部关闭USB
* 						1: 内部打开USB
* 						
* Return:
* 	0       成功
* 	other   失败
*
*****************************************************************/
void hal_UsbOnOff(int onoff);
#endif
